﻿/**************************************
* Copyright by Spring Studio(http://springstudio.cn)
* 信息编码系统外部调用接口
* 调用方法：在页面中通过引用外部js代码，来使用本文件提供的接口
* 详细步骤：
* 1、在页面<head></head>区域插入：<script type="text/javascript" src="http://localhost:50235/Interface/Invoking.js"></script>
* 2、在需要编码的位置调用 InfoCode_CreateInfoCode(ruleGuid, userId) 方法，来创建编码。
* 3、在提交页面其他内容之前，调用 InfoCode_SaveInfoCode() 方法，以保存编码到数据库。
*    如该方法返回false，则可以通过InfoCode_SaveErrorCode、InfoCode_SaveErrorMessage两个参数获取错误信息。
***************************************/

/*
* 全局变量
*/
var InfoCode_Url = "http://localhost:50235";  // 企业信息编码站点地址

var InfoCode_InfoCode;  // 信息编码
var InfoCode_InfoDesc;  // 编码说明
var InfoCode_RuleGuid;  // 编码类型
var InfoCode_CreateUserId;  // 创建者证档号
var InfoCode_SerialReference;  // 流水号参考码
var InfoCode_SerialNumber;  // 当前流水号值

/*
* 编码保存失败时，服务器返回的错误代码和错误消息，具体分为以下四种情况：
* 1、UnCreated：编码尚未生成！
* 2、MissingParam：所需的参数不完整！
* 3、Existed：操作超时：该编码已被其他用户占用。
* 4、InternalError：编码系统内部错误：请与系统管理员联系。
*/
var InfoCode_SaveErrorCode;
var InfoCode_SaveErrorMessage;


/**
* 初始化一个xmlhttp对象
*/
function InfoCode_GetXmlHttp() {
    var xmlhttp = null;
    try {
        xmlhttp = new XMLHttpRequest();
    }
    catch (trymicrosoft) {
        try {
            xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (othermicrosoft) {
            try {
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch (failed) {
                xmlhttp = null;
            }
        }
    }
    return xmlhttp;
}

/*
* 创建新编码（返回值为新编码）
*/
function InfoCode_CreateInfoCode(ruleGuid, userId) {
    InfoCode_RuleGuid = ruleGuid;
    InfoCode_CreateUserId = userId;
    
    // 弹出代码编辑窗口，并采用Ajax调用回调页面获取生成的编码
    if (ruleGuid != undefined && ruleGuid != "" && userId != undefined && userId != "") {

        window.showModalDialog(InfoCode_Url + "/Interface/CreateInfoCode.aspx?RuleGuid=" + ruleGuid, window, "dialogWidth:750px;dialogHeight:565px");

        // 同步调用方式获取生成的代码
        var xmlhttp = InfoCode_GetXmlHttp();
        if (xmlhttp != null) {
            // 定义回调函数
            xmlhttp.onreadystatechange = function() {
                if (xmlhttp.readyState == 4) {
                    if (xmlhttp.status == 200) {
                        if (xmlhttp.responseText != "error") {
                            var str = xmlhttp.responseText.split("{|}");
                            InfoCode_InfoCode = str[0];
                            InfoCode_InfoDesc = str[1];
                            InfoCode_SerialReference = str[2];
                            InfoCode_SerialNumber = str[3];
                        }
                    }
                }
            }

            xmlhttp.open("GET", InfoCode_Url + "/Interface/InfoCodeCallback.aspx", false);
            xmlhttp.send(null);
        }

        // 将取得的编码赋给函数返回值
        if (InfoCode_InfoCode != undefined) {
            return InfoCode_InfoCode;
        }
        else {
            return "";
        }
    }
    else {
        alert("编码失败：必须提供ruleGuid和userId参数！请与系统管理员联系。");
    }
}

/*
* 保存刚刚获取的编码（保存成功，则返回值为true；保存失败，则返回值为false）
*/
function InfoCode_SaveInfoCode() {
    if (InfoCode_InfoCode != undefined && InfoCode_InfoCode != "" && InfoCode_SerialReference != undefined && InfoCode_SerialReference != "" && InfoCode_SerialNumber != undefined && InfoCode_SerialNumber != "") {
        var result;
        // 同步调用方式保存已生成的编码
        var xmlhttp = InfoCode_GetXmlHttp();
        if (xmlhttp != null) {
            // 定义回调函数
            xmlhttp.onreadystatechange = function() {
                if (xmlhttp.readyState == 4) {
                    if (xmlhttp.status == 200) {
                        if (xmlhttp.responseText != "Success!") {
                            var str = xmlhttp.responseText.split("{|}");
                            InfoCode_SaveErrorCode = str[0];
                            InfoCode_SaveErrorMessage = str[1];
                            result = false;
                        }
                        else {
                            result = true;
                        }
                    }
                }
            }

            var urlSave = InfoCode_Url + "/Interface/SaveInfoCode.aspx?InfoCode=" + InfoCode_InfoCode + "&InfoDesc=" + InfoCode_InfoDesc + "&RuleGuid=" + InfoCode_RuleGuid + "&CreateUserId=" + InfoCode_CreateUserId + "&SerialReference=" + InfoCode_SerialReference + "&SerialNumber=" + InfoCode_SerialNumber;
            xmlhttp.open("GET", urlSave, false);
            xmlhttp.send(null);
        }

        if (result == true) {
            InfoCode_InfoCode = undefined;
            InfoCode_InfoDesc = undefined;
            InfoCode_RuleGuid = undefined;
            InfoCode_CreateUserId = undefined;
            InfoCode_SerialReference = undefined;
            InfoCode_SerialNumber = undefined;
        }

        return result;
    }
    else {
        InfoCode_SaveErrorCode = "UnCreated";
        InfoCode_SaveErrorMessage = "编码尚未生成！";
        return false;
    }
}